/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package CONTABILIDAD_MODELO;

import Conexion.Conexion;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author equipo_4
 */
public class CON_AJUSTE_INFLACIONARIO 
{
    private Double ID_COMPROBANTE;
    private Double ID_CUENTA;
    private Double CUENTA_DEBE;
    private Double CUENTA_HABER;
    private String CODIGO;
    private String DESCRIPCION;
    private Double ID_CENTRO_COSTO;
    private String CODIGO_CENTRO_COSTO;
    private String GLOSA_DEBE;
    private String GLOSA_HABER;
    private String DESCRIPCION_CENTRO_COSTO;
    private Double DEBE;
    private Double HABER;
    private Double TIPO_CAMBIO;
    private Conexion con;

    public CON_AJUSTE_INFLACIONARIO() {
    }
    
    public List<CON_AJUSTE_INFLACIONARIO> Todos()
    {
        try
        {
            String consulta = "select * BROKER.CON_AJUSTE_INFLACIONARIO";
            ResultSet rs = con.EjecutarConsulta(consulta);
            return Cargar(rs);
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        return null;
    }
    public CON_AJUSTE_INFLACIONARIO Buscar(Double id_cuenta)
    {
        try
        {
            String consulta = "select * from BROKER.CON_AJUSTE_INFLACIONARIO where ID_CUENTA = "+id_cuenta;
            ResultSet rs = con.EjecutarConsulta(consulta);
            
            CON_AJUSTE_INFLACIONARIO aju;
            List<CON_AJUSTE_INFLACIONARIO> lista = Cargar(rs);
            if(lista.size()>0)
                aju = lista.get(0);
            else
            {
                consulta = "select * from BROKER.CON_AJUSTE_INFLACIONARIO where ID_CENTRO_COSTO = "+id_cuenta;
                rs = con.EjecutarConsulta(consulta);
                aju = Cargar(rs).get(0);
            }
            return aju;
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        return null;
    }
    
    public List<List> Generar(int mes, int ano)
    {
        try
        {
            String consulta = "select ID_CUENTA, ID_CENTRO_COSTO from BROKER.CON_AJUSTE_INFLACIONARIO where codigo_comprobante like('%-"+mes+"-"+ano+"') GROUP BY(ID_CUENTA, ID_CENTRO_COSTO)";
            ResultSet rs = con.EjecutarConsulta(consulta);
            return ResultadoXCuenta(rs);
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        return null;
    }
    
    public List<List> ResultadoXCuenta(ResultSet rs)
    {
        try
        {
            CON_MONEDA moneda = new CON_MONEDA();
            moneda.setCon(con);
            moneda = moneda.BuscarXid(moneda.IdMonedaInflacionaria());
            double multiplicador = moneda.getTIPO_DE_CAMBIO();
            List<List> lfinal =new ArrayList<>();
            while(rs.next())
            {
                List lista = new ArrayList();
                double cc = rs.getDouble("ID_CENTRO_COSTO");
                
                ResultSet rsf = null;
                if(cc!=0.0)
                {
                    lista.add(cc);
                    String consulta = "select ID_CUENTA,sum(DEBE) as debe, sum(HABER) as haber, TIPO_CAMBIO  from BROKER.CON_AJUSTE_INFLACIONARIO where ID_CENTRO_COSTO = "+rs.getDouble("ID_CENTRO_COSTO")+" GROUP BY(ID_COMPROBANTE, TIPO_CAMBIO, ID_CUENTA, TIPO_CAMBIO)";
                    rsf = con.EjecutarConsulta(consulta);
                }
                else
                {
                    cc = rs.getDouble("ID_CUENTA");
                    lista.add(cc);
                    String consulta = "select ID_CUENTA,sum(DEBE) as debe, sum(HABER) as haber, TIPO_CAMBIO  from BROKER.CON_AJUSTE_INFLACIONARIO where ID_CUENTA = "+rs.getDouble("ID_CUENTA")+" GROUP BY(ID_COMPROBANTE, TIPO_CAMBIO, ID_CUENTA, TIPO_CAMBIO)";
                    rsf = con.EjecutarConsulta(consulta);
                }
             
                double debedif=0.0;
                double haberdif=0.0;
                double debep =0.0;                    
                double haberp=0.0;
                while(rsf.next())
                {
                    Double tc = rsf.getDouble("TIPO_CAMBIO");
                    double debe = (rsf.getDouble("debe"));                    
                    double haber = (rsf.getDouble("haber"));
                    debep+=debe;
                    haberp+=haberp;
                    double debec1 = (debe/tc);
                    double haberc1 = (haber/tc);
                    double debec2 = (debec1*multiplicador);
                    double haberc2 = (haberc1*multiplicador);
                    double debec3 = (debec2-debe);
                    double haberc3 = (haberc2-haber);
                    
                    if(debec3>=0)
                        debedif += debec3;
                    else
                        haberdif += debec3*-1;
                    
                    if(haberc3>=0)
                        haberdif+=haberc3;
                    else
                        debedif+=haberc3*-1;
                }                
                lista.add(debedif);
                lista.add(haberdif);
                lista.add(debep);
                lista.add(haberp);
                lfinal.add(lista);
            }
            return lfinal;
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        return null;
    }
    
   
    
    public void resultado(Double id_cuenta)
    {
        
    }

    public List<CON_AJUSTE_INFLACIONARIO> Cargar(ResultSet rs){
        try
        {
            List<CON_AJUSTE_INFLACIONARIO> lista = new ArrayList<CON_AJUSTE_INFLACIONARIO>();
            while(rs.next())
            {
                CON_AJUSTE_INFLACIONARIO objeto = new CON_AJUSTE_INFLACIONARIO();
                objeto.setCODIGO(rs.getString("CODIGO"));
                objeto.setCODIGO_CENTRO_COSTO(rs.getString("CODIGO_CENTRO_COSTO"));
                objeto.setDESCRIPCION(rs.getString("DESCRIPCION"));
                objeto.setGLOSA_DEBE(rs.getString("GLOSA_DEBE"));
                objeto.setGLOSA_HABER(rs.getString("GLOSA_HABER"));
                objeto.setDESCRIPCION_CENTRO_COSTO(rs.getString("DESCRIPCION_CENTRO_COSTO"));
                objeto.setDEBE(rs.getDouble("DEBE"));
                objeto.setHABER(rs.getDouble("HABER"));
                objeto.setID_CENTRO_COSTO(rs.getDouble("ID_CENTRO_COSTO"));
                objeto.setID_COMPROBANTE(rs.getDouble("ID_COMPROBANTE"));
                objeto.setID_CUENTA(rs.getDouble("ID_CUENTA"));
                objeto.setCUENTA_DEBE(rs.getDouble("CUENTA_DEBE"));
                objeto.setCUENTA_HABER(rs.getDouble("CUENTA_HABER"));
                objeto.setTIPO_CAMBIO(rs.getDouble("TIPO_CAMBIO"));
                objeto.setCon(con);
                lista.add(objeto);
            }
            return lista;
        }
        catch(SQLException ex)
        {
            ex.printStackTrace();
            return null;
        }
    }
    
    public Double getID_COMPROBANTE() {
        return ID_COMPROBANTE;
    }

    public void setID_COMPROBANTE(Double ID_COMPROBANTE) {
        this.ID_COMPROBANTE = ID_COMPROBANTE;
    }

    public Double getID_CUENTA() {
        return ID_CUENTA;
    }

    public void setID_CUENTA(Double ID_CUENTA) {
        this.ID_CUENTA = ID_CUENTA;
    }

    public String getCODIGO() {
        return CODIGO;
    }

    public void setCODIGO(String CODIGO) {
        this.CODIGO = CODIGO;
    }

    public String getDESCRIPCION() {
        return DESCRIPCION;
    }

    public void setDESCRIPCION(String DESCRIPCION) {
        this.DESCRIPCION = DESCRIPCION;
    }

    public Double getID_CENTRO_COSTO() {
        return ID_CENTRO_COSTO;
    }

    public void setID_CENTRO_COSTO(Double ID_CENTRO_COSTO) {
        this.ID_CENTRO_COSTO = ID_CENTRO_COSTO;
    }

    public String getCODIGO_CENTRO_COSTO() {
        return CODIGO_CENTRO_COSTO;
    }

    public void setCODIGO_CENTRO_COSTO(String CODIGO_CENTRO_COSTO) {
        this.CODIGO_CENTRO_COSTO = CODIGO_CENTRO_COSTO;
    }

    public String getDESCRIPCION_CENTRO_COSTO() {
        return DESCRIPCION_CENTRO_COSTO;
    }

    public void setDESCRIPCION_CENTRO_COSTO(String DESCRIPCION_CENTRO_COSTO) {
        this.DESCRIPCION_CENTRO_COSTO = DESCRIPCION_CENTRO_COSTO;
    }

    public Double getDEBE() {
        return DEBE;
    }

    public void setDEBE(Double DEBE) {
        this.DEBE = DEBE;
    }

    public Double getHABER() {
        return HABER;
    }

    public void setHABER(Double HABER) {
        this.HABER = HABER;
    }

    public Double getTIPO_CAMBIO() {
        return TIPO_CAMBIO;
    }

    public void setTIPO_CAMBIO(Double TIPO_CAMBIO) {
        this.TIPO_CAMBIO = TIPO_CAMBIO;
    }

    public Conexion getCon() {
        return con;
    }

    public void setCon(Conexion con) {
        this.con = con;
    }

    public Double getCUENTA_DEBE() {
        return CUENTA_DEBE;
    }

    public void setCUENTA_DEBE(Double CUENTA_DEBE) {
        this.CUENTA_DEBE = CUENTA_DEBE;
    }

    public Double getCUENTA_HABER() {
        return CUENTA_HABER;
    }

    public void setCUENTA_HABER(Double CUENTA_HABER) {
        this.CUENTA_HABER = CUENTA_HABER;
    }

    public String getGLOSA_DEBE() {
        return GLOSA_DEBE;
    }

    public void setGLOSA_DEBE(String GLOSA_DEBE) {
        this.GLOSA_DEBE = GLOSA_DEBE;
    }

    public String getGLOSA_HABER() {
        return GLOSA_HABER;
    }

    public void setGLOSA_HABER(String GLOSA_HABER) {
        this.GLOSA_HABER = GLOSA_HABER;
    }        
    
}
